/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package frmMovimientos;

import cls.conexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import org.omg.CORBA.TIMEOUT;

/**
 *
 * @author Sammy Guergachi <sguergachi at gmail.com>
 */
public class frmMovimientoInventario extends javax.swing.JFrame {

    static conexion CP; // conexion con base de datos

    DefaultTableModel modelo;
    DefaultTableModel model;
    private String Codigo;

    public frmMovimientoInventario() throws ClassNotFoundException, SQLException {
        initComponents();
        setLocationRelativeTo(null);
        CP = new conexion("proyecto2", "usrUTN", "12345");
        modelo = (DefaultTableModel) tblMovimientos.getModel();
        model = (DefaultTableModel) tbldetalle.getModel();
//        final frmMovimientoInventario frame = new frmMovimientoInventario();
//        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
//        frame.setVisible(true);
//        setExtendedState(JFrame.MAXIMIZED_BOTH);

        fecha();
        verdatos();
        Combo();
    }

    private String fecha() {

        String Fecha = "";
        Calendar fecha = new GregorianCalendar();
        int año = fecha.get(Calendar.YEAR);
        int mes = fecha.get(Calendar.MONTH) + 1;

        int dia = fecha.get(Calendar.DAY_OF_MONTH);

        int hora = fecha.get(Calendar.HOUR_OF_DAY);
        int minutos = fecha.get(Calendar.MINUTE);
        int segundos = fecha.get(Calendar.SECOND);

        Fecha = "" + año + "-" + mes + "-" + dia + " " + hora + ":" + minutos + ":" + segundos;
        return Fecha;
    }

    public void Combo() {
        try {
            ResultSet datos = this.CP.select("descripcion", "\"schUTN\".tipo_movimiento", "lower(activo)='s'");

            while (datos.next()) {
                cbxTipoMov.addItem(datos.getString(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }

        try {
            ResultSet datos = this.CP.select("descripcion", "\"schUTN\".articulo", "lower(activo)='s'");

            while (datos.next()) {
                cbxArticulo.addItem(datos.getString(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void verdatos() {

        int CantidadFilas = tblMovimientos.getRowCount();
        for (int i = CantidadFilas - 1; i >= 0; i--) {
            modelo.removeRow(i);
        }
        Object[] fila = new Object[5];
//        modelo.setRowCount(0);

        int Filas = 0;
        try {
            ResultSet datos = this.CP.select2("*", "\"schUTN\".movimiento_inventario", "order by num_documento");
            while (datos.next()) {
                fila[0] = datos.getString(1);

                fila[1] = datos.getString(2);
                fila[2] = datos.getString(3);

                if (datos.getString(4).equalsIgnoreCase("s")) {

                    fila[3] = true;
                } else {
                    fila[3] = false;
                }

                if (datos.getString(5).equalsIgnoreCase("s")) {

                    fila[4] = true;
                } else {
                    fila[4] = false;
                }

                modelo.addRow(fila);
                //tblArticulos.setModel(modelo);

                Filas++;
            }
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());
        }

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        jScrollPane1 = new javax.swing.JScrollPane();
        tblMovimientos = new javax.swing.JTable();
        jScrollPane2 = new javax.swing.JScrollPane();
        tbldetalle = new javax.swing.JTable();
        btnAplicar = new javax.swing.JButton();
        btnAnular = new javax.swing.JButton();
        btnNuevo = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        txtjustificacion = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        JlArticulo = new javax.swing.JLabel();
        JlTipo = new javax.swing.JLabel();
        cbxTipoMov = new javax.swing.JComboBox();
        txtCantidad = new javax.swing.JTextField();
        JlCantidad = new javax.swing.JLabel();
        cbxArticulo = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        tblMovimientos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "NumeroDoc", "Fecha", "Justificacion", "Aplicado", "Anulado"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class, java.lang.Boolean.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, true, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, tblMovimientos, org.jdesktop.beansbinding.ELProperty.create("${autoResizeMode}"), tblMovimientos, org.jdesktop.beansbinding.BeanProperty.create("autoResizeMode"));
        bindingGroup.addBinding(binding);

        tblMovimientos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblMovimientosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblMovimientos);
        if (tblMovimientos.getColumnModel().getColumnCount() > 0) {
            tblMovimientos.getColumnModel().getColumn(0).setResizable(false);
            tblMovimientos.getColumnModel().getColumn(1).setMinWidth(1);
            tblMovimientos.getColumnModel().getColumn(1).setMaxWidth(1000);
            tblMovimientos.getColumnModel().getColumn(2).setResizable(false);
            tblMovimientos.getColumnModel().getColumn(3).setResizable(false);
            tblMovimientos.getColumnModel().getColumn(4).setResizable(false);
        }

        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 100, 470, -1));

        tbldetalle.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "NumeroDoc", "Linea", "Articulo", "Tipo Mov", "Cantidad", "Saldo Gen", "ExistAntMov", "Costo"
            }
        ));
        jScrollPane2.setViewportView(tbldetalle);

        getContentPane().add(jScrollPane2, new org.netbeans.lib.awtextra.AbsoluteConstraints(470, 100, 490, -1));

        btnAplicar.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        btnAplicar.setText("Aplicar");
        btnAplicar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAplicarActionPerformed(evt);
            }
        });
        getContentPane().add(btnAplicar, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 20, -1, -1));

        btnAnular.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        btnAnular.setText("Anular");
        btnAnular.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAnularActionPerformed(evt);
            }
        });
        getContentPane().add(btnAnular, new org.netbeans.lib.awtextra.AbsoluteConstraints(380, 20, -1, -1));

        btnNuevo.setFont(new java.awt.Font("Dialog", 1, 12)); // NOI18N
        btnNuevo.setText("Nuevo");
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        getContentPane().add(btnNuevo, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, -1, -1));

        btnSalvar.setText("Salvar/Insertar");
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });
        getContentPane().add(btnSalvar, new org.netbeans.lib.awtextra.AbsoluteConstraints(510, 20, -1, -1));

        jButton2.setText("jButton2");
        getContentPane().add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(730, 20, -1, -1));

        jButton3.setText("jButton3");
        getContentPane().add(jButton3, new org.netbeans.lib.awtextra.AbsoluteConstraints(890, 20, -1, -1));
        getContentPane().add(txtjustificacion, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 70, 280, -1));

        jLabel1.setText("Justificacion");
        getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 80, -1, -1));

        JlArticulo.setText("Articulo");
        getContentPane().add(JlArticulo, new org.netbeans.lib.awtextra.AbsoluteConstraints(490, 70, -1, -1));

        JlTipo.setText("Tipo Mov");
        getContentPane().add(JlTipo, new org.netbeans.lib.awtextra.AbsoluteConstraints(630, 70, -1, -1));

        getContentPane().add(cbxTipoMov, new org.netbeans.lib.awtextra.AbsoluteConstraints(690, 65, -1, -1));
        getContentPane().add(txtCantidad, new org.netbeans.lib.awtextra.AbsoluteConstraints(870, 65, 60, -1));

        JlCantidad.setText("Cantidad");
        getContentPane().add(JlCantidad, new org.netbeans.lib.awtextra.AbsoluteConstraints(800, 70, -1, -1));

        getContentPane().add(cbxArticulo, new org.netbeans.lib.awtextra.AbsoluteConstraints(540, 65, 80, -1));

        bindingGroup.bind();

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed

        int numDoc = 0;
        String Justificacion = "";
        Justificacion = txtjustificacion.getText();
//   DefaultTableModel Modelo=(DefaultTableModel)tblMovimientos.getModel();
//   int Vector[]=tblMovimientos.getSelectedRows();
//   int En=tblMovimientos.getSelectedRow();
//   Justificacion=(String) tblMovimientos.getValueAt(En, 3);
        try {
            numDoc = tblMovimientos.getRowCount() + 1;
            boolean resultado = this.CP.insert("\"schUTN\".movimiento_inventario",
                    "(" + numDoc + ", "
                    + "'" + fecha() + "', "
                    + "'" + Justificacion + "', "
                    + "'N', " + "'N'"
                    + ");");

        } catch (Exception e) {
            System.out.printf("Error: " + e.toString());
        }

        verdatos();


    }//GEN-LAST:event_btnNuevoActionPerformed

    private void NoVisible() {
        this.JlArticulo.setVisible(false);
        this.JlCantidad.setVisible(false);
        this.JlTipo.setVisible(false);

        this.cbxTipoMov.setVisible(false);
        this.btnSalvar.setVisible(false);
        this.jButton2.setVisible(false);
        this.jButton3.setVisible(false);
        this.cbxArticulo.setVisible(false);
        this.txtCantidad.setVisible(false);

    }

    private void Visible() {
        this.JlArticulo.setVisible(true);
        this.JlCantidad.setVisible(true);
        this.JlTipo.setVisible(true);

        this.cbxTipoMov.setVisible(true);
        this.btnSalvar.setVisible(true);
        this.jButton2.setVisible(true);
        this.jButton3.setVisible(true);
        this.cbxArticulo.setVisible(true);
        this.txtCantidad.setVisible(true);

    }
    private void tblMovimientosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblMovimientosMouseClicked

        int CantidadFilas = tbldetalle.getRowCount();
        for (int i = CantidadFilas - 1; i >= 0; i--) {
            model.removeRow(i);
        }

        int FilaSeleccionada = tblMovimientos.getSelectedRow();
        Codigo = tblMovimientos.getValueAt(FilaSeleccionada, 0).toString();

        String A = "";
        String B = "";

        ResultSet datos1 = this.CP.select("aplicado,anulado", "\"schUTN\".movimiento_inventario", "num_documento = '" + Codigo + "'");

        try {
            while (datos1.next()) {
                A = datos1.getString(1);
                B = datos1.getString(2);
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (A.equalsIgnoreCase("s") && B.equalsIgnoreCase("n")) {

            this.btnAnular.setVisible(true);
            this.btnAplicar.setVisible(false);

            Visible();
            Actualizar();

        } else {
            if (A.equalsIgnoreCase("n") && B.equalsIgnoreCase("s")) {

                this.btnAplicar.setVisible(true);
                this.btnAnular.setVisible(false);
                Visible();
                Actualizar();

            } else {
                if (A.equalsIgnoreCase("n") && B.equalsIgnoreCase("n")) {

                    Visible();

                    this.btnAplicar.setVisible(true);
                    this.btnAnular.setVisible(true);
                    Verdatos2();
//                    Actualizar();

                } else {
                    if (A.equalsIgnoreCase("s") && B.equalsIgnoreCase("s")) {

                        NoVisible();

                        this.btnAplicar.setVisible(false);
                        this.btnAnular.setVisible(false);
                        Actualizar();

                    }
                }
            }
        }
    }//GEN-LAST:event_tblMovimientosMouseClicked

    private void Verdatos2() {

        int CantidadFilas = tbldetalle.getRowCount();
        for (int i = CantidadFilas - 1; i >= 0; i--) {
            model.removeRow(i);
        }
        int vector[] = tblMovimientos.getSelectedRows();
        int in = tblMovimientos.getSelectedRow();

        int Num_Doc = Integer.parseInt(tblMovimientos.getValueAt(in, 0).toString());

        try {

            ResultSet datos = this.CP.select("*", "\"schUTN\".borrador", "num_documento = '" + Num_Doc + "'");

            String[] Detalles = new String[8];

            while (datos.next()) {
//                this.TablaDeDatos.add(datos.getString(1)+" "+datos.getString(2) +" "+ datos.getString(3) + "\n");

                Detalles[0] = datos.getString(1);
                Detalles[1] = datos.getString(2);
//             Detalles[2]= datos.getString(3);
//             Detalles[3]= datos.getString(4);

                Detalles[4] = datos.getString(5);
                Detalles[5] = datos.getString(6);
                Detalles[6] = datos.getString(7);
                Detalles[7] = datos.getString(8);

                ResultSet dato3 = this.CP.select("descripcion", "\"schUTN\".articulo", "cod_articulo= '" + datos.getString(3) + "'");

                while (dato3.next()) {
                    Detalles[2] = dato3.getString(1);
                }
                ResultSet dato = this.CP.select("descripcion", "\"schUTN\".tipo_movimiento", "tipo_movimiento= '" + datos.getString(4) + "'");

                while (dato.next()) {
                    Detalles[3] = dato.getString(1);
//                       TableColumn sportColumn = tbldetalle.getColumnModel ().getColumn(3);
//                        JComboBox Combo=new JComboBox();
//                      
//                    Combo.addItem(dato.getString(1));
//Combo.  
//                     sportColumn.setCellEditor(new DefaultCellEditor(Combo));

                }

                model.addRow(Detalles);

            }

            System.out.println("Datos Cargados");
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString() + "\n");
        }

    }

    private void Aplicar() {
        int vector[] = tblMovimientos.getSelectedRows();
        int in = tblMovimientos.getSelectedRow();

        int Num_Doc = Integer.parseInt(tblMovimientos.getValueAt(in, 0).toString());

        ResultSet datos = this.CP.select("*", "\"schUTN\".borrador", "num_documento = '" + Num_Doc + "'");

        String[] Detalles = new String[8];

        try {
            while (datos.next()) {
//                this.TablaDeDatos.add(datos.getString(1)+" "+datos.getString(2) +" "+ datos.getString(3) + "\n");

                Detalles[0] = datos.getString(1);
                Detalles[1] = datos.getString(2);
                Detalles[2] = datos.getString(3);
                Detalles[3] = datos.getString(4);

                Detalles[4] = datos.getString(5);
                Detalles[5] = datos.getString(6);
                Detalles[6] = datos.getString(7);
                Detalles[7] = datos.getString(8);

                boolean resultado = CP.insert("\"schUTN\".detalle_movimiento_inventario",
                        "("
                        + datos.getString(1)
                        + ", " + datos.getString(2)
                        + ", '" + datos.getString(3)
                        + "', '" + datos.getString(4)
                        + "', " + datos.getString(5)
                        + ", " + datos.getString(6)
                        + ", " + datos.getString(7)
                        + ", " + datos.getString(8)
                        + ");");

            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        boolean Elim=this.CP.eliminar("\"schUTN\".borrador", "num_documento='"+Num_Doc+"'");

        boolean datos2 = this.CP.actualizar("\"schUTN\".movimiento_inventario", "aplicado = 's'", "num_documento=" + Num_Doc);

        /////////////////////////////////////////////////////////////////////////////
        ///////Modificacion De articulos///////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////
        ResultSet Modfificacion = this.CP.select("*", "\"schUTN\".detalle_movimiento_inventario", "num_documento = '" + Num_Doc + "'");

        try {
            while (Modfificacion.next()) {
//                Modfificacion.getString(1);
//                Modfificacion.getString(2);
                Modfificacion.getString(3);
                Modfificacion.getString(4);
                Modfificacion.getString(5);
                Modfificacion.getString(7);
                String Tipo_M = "";
                ResultSet Tipo_Mov = this.CP.select("tipo_operacion", "\"schUTN\".tipo_movimiento", "tipo_movimiento = '" + Modfificacion.getString(4) + "'");
                while (Tipo_Mov.next()) {
                    Tipo_M = Tipo_Mov.getString(1);
                }

                if (Tipo_M.equalsIgnoreCase("1")) {
                    int SumaA = 0;

                    String Actual = "";
                    ResultSet ExistAct = this.CP.select("existencia", "\"schUTN\".articulo", "cod_articulo= '" + Modfificacion.getString(3) + "'");

                    while (ExistAct.next()) {
                        Actual = ExistAct.getString(1);
                    }
                    SumaA = Integer.parseInt(Modfificacion.getString(5)) + Integer.parseInt(Actual);

                    boolean Sumar = this.CP.actualizar("\"schUTN\".articulo", "existencia = " + SumaA, "cod_articulo='" + Modfificacion.getString(3) + "'");
                }
                if (Tipo_M.equalsIgnoreCase("-1")) {
                    int SumaA = 0;

                    String Actual = "";
                    ResultSet ExistAct = this.CP.select("existencia", "\"schUTN\".articulo", "cod_articulo= '" + Modfificacion.getString(3) + "'");

                    while (ExistAct.next()) {
                        Actual = ExistAct.getString(1);
                    }
                    SumaA = Integer.parseInt(Actual) - Integer.parseInt(Modfificacion.getString(5));

                    boolean Sumar = this.CP.actualizar("\"schUTN\".articulo", "existencia = " + SumaA, "cod_articulo='" + Modfificacion.getString(3) + "'");
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }

        Verdatos2();
        verdatos();

    }
    private void btnAnularActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnularActionPerformed

        int vector[] = tblMovimientos.getSelectedRows();
        int in = tblMovimientos.getSelectedRow();
        int Num_Doc = Integer.parseInt(tblMovimientos.getValueAt(in, 0).toString());
        String Respuesta = "";
        ResultSet dato3 = this.CP.select("aplicado", "\"schUTN\".movimiento_inventario", "num_documento= '" + Codigo + "'");
        try {
            while (dato3.next()) {
                Respuesta = dato3.getString(1);
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (Respuesta.equalsIgnoreCase("N")) {
            JOptionPane.showMessageDialog(null, "Nesecita Aplicar Antes de Anular Un movimiento");
        } else {
            // Aqui va el codigo de Anular

            boolean datos2 = this.CP.actualizar("\"schUTN\".movimiento_inventario", "anulado = 's'", "num_documento=" + Num_Doc);

            /////////////////////////////////////////////////////////////////////////////
            ///////Modificacion De articulos///////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////
            ResultSet Modfificacion = this.CP.select("*", "\"schUTN\".detalle_movimiento_inventario", "num_documento = '" + Num_Doc + "'");

            try {
                while (Modfificacion.next()) {
//                Modfificacion.getString(1);
//                Modfificacion.getString(2);
                    Modfificacion.getString(3);
                    Modfificacion.getString(4);
                    Modfificacion.getString(5);
                    Modfificacion.getString(7);
                    String Tipo_M = "";
                    ResultSet Tipo_Mov = this.CP.select("tipo_operacion", "\"schUTN\".tipo_movimiento", "tipo_movimiento = '" + Modfificacion.getString(4) + "'");
                    while (Tipo_Mov.next()) {
                        Tipo_M = Tipo_Mov.getString(1);
                    }

                    if (Tipo_M.equalsIgnoreCase("1")) {
                        int SumaA = 0;

                        String Actual = "";
                        ResultSet ExistAct = this.CP.select("existencia", "\"schUTN\".articulo", "cod_articulo= '" + Modfificacion.getString(3) + "'");

                        while (ExistAct.next()) {
                            Actual = ExistAct.getString(1);
                        }

                        SumaA = Integer.parseInt(Actual) - Integer.parseInt(Modfificacion.getString(5));

                        boolean Sumar = this.CP.actualizar("\"schUTN\".articulo", "existencia = " + SumaA, "cod_articulo='" + Modfificacion.getString(3) + "'");
                    }
                    if (Tipo_M.equalsIgnoreCase("-1")) {
                        int SumaA = 0;

                        String Actual = "";
                        ResultSet ExistAct = this.CP.select("existencia", "\"schUTN\".articulo", "cod_articulo= '" + Modfificacion.getString(3) + "'");

                        while (ExistAct.next()) {
                            Actual = ExistAct.getString(1);
                        }
                        SumaA = Integer.parseInt(Actual) + Integer.parseInt(Modfificacion.getString(5));

                        boolean Sumar = this.CP.actualizar("\"schUTN\".articulo", "existencia = " + SumaA, "cod_articulo='" + Modfificacion.getString(3) + "'");
                    }
                }
            } catch (SQLException ex) {
                Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
            }

            verdatos();

            this.btnAnular.setVisible(false);
            this.btnSalvar.setVisible(false);
            NoVisible();
        }

        
    }//GEN-LAST:event_btnAnularActionPerformed

    private void btnAplicarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAplicarActionPerformed

        Aplicar();
        this.btnAplicar.setVisible(false);
        verdatos();
    }//GEN-LAST:event_btnAplicarActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed

        String cod;

        int vector[] = tblMovimientos.getSelectedRows();
        int in = tblMovimientos.getSelectedRow();

        int Num_Doc = Integer.parseInt(tblMovimientos.getValueAt(in, 0).toString());

        int numLinea = tbldetalle.getRowCount() + 1;
        boolean resultado = CP.insert("\"schUTN\".borrador",
                "("
                + Num_Doc
                + ", " + numLinea
                + ", '" + CodigoArt(cbxArticulo.getSelectedItem().toString())
                + "', '" + CodigoMov(cbxTipoMov.getSelectedItem().toString())
                + "', " + txtCantidad.getText()
                + ", " + Saldo()
                + ", " + ExistenciaAnt()
                + ", " + CostoSinImp()
                + ");");
        Verdatos2();


    }//GEN-LAST:event_btnSalvarActionPerformed

    private int Saldo() {
        int Ret = 0;
        Ret = Integer.parseInt(txtCantidad.getText()) * CostoSinImp();

        return Ret;
    }

    private int ExistenciaAnt() {
        int Retorno = 0;
        ResultSet dato3 = this.CP.select("existencia", "\"schUTN\".articulo", "cod_articulo= '" + CodigoArt(cbxArticulo.getSelectedItem().toString()) + "'");

        try {
            while (dato3.next()) {
                Retorno = Integer.parseInt(dato3.getString(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Retorno;
    }

    private int CostoSinImp() {
        int Retorno = 0;
        ResultSet dato3 = this.CP.select("precio_sin_imp", "\"schUTN\".articulo", "cod_articulo= '" + CodigoArt(cbxArticulo.getSelectedItem().toString()) + "'");

        try {
            while (dato3.next()) {
                Retorno = Integer.parseInt(dato3.getString(1));
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Retorno;
    }

    private String CodigoArt(String Descripcion) {
        String Retorno = "";
        ResultSet dato3 = this.CP.select("cod_articulo", "\"schUTN\".articulo", "descripcion= '" + Descripcion + "'");

        try {
            while (dato3.next()) {
                Retorno = dato3.getString(1);
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Retorno;
    }

    private String CodigoMov(String Descripcion) {
        String Retorno = "";
        ResultSet dato3 = this.CP.select("tipo_movimiento", "\"schUTN\".tipo_movimiento", "descripcion= '" + Descripcion + "'");

        try {
            while (dato3.next()) {
                Retorno = dato3.getString(1);
            }
        } catch (SQLException ex) {
            Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Retorno;
    }

    private void Actualizar() {
        try {

            ResultSet datos = this.CP.select("*", "\"schUTN\".detalle_movimiento_inventario", "num_documento = '" + Codigo + "'");

            String[] Detalles = new String[8];

            while (datos.next()) {
//                this.TablaDeDatos.add(datos.getString(1)+" "+datos.getString(2) +" "+ datos.getString(3) + "\n");

                Detalles[0] = datos.getString(1);
                Detalles[1] = datos.getString(2);
//             Detalles[2]= datos.getString(3);
//             Detalles[3]= datos.getString(4);

                Detalles[4] = datos.getString(5);
                Detalles[5] = datos.getString(6);
                Detalles[6] = datos.getString(7);
                Detalles[7] = datos.getString(8);

                ResultSet dato3 = this.CP.select("descripcion", "\"schUTN\".articulo", "cod_articulo= '" + datos.getString(4) + "'");

                while (dato3.next()) {
                    Detalles[2] = dato3.getString(1);
                }
                ResultSet dato = this.CP.select("descripcion", "\"schUTN\".tipo_movimiento", "tipo_movimiento= '" + datos.getString(4) + "'");

                while (dato.next()) {
                    Detalles[3] = dato.getString(1);
//                       TableColumn sportColumn = tbldetalle.getColumnModel ().getColumn(3);
//                        JComboBox Combo=new JComboBox();
//                      
//                    Combo.addItem(dato.getString(1));
//Combo.  
//                     sportColumn.setCellEditor(new DefaultCellEditor(Combo));

                }

                model.addRow(Detalles);

            }

            System.out.println("Datos Cargados");
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString() + "\n");
        }
    }

    private void Actualizar2() {
        int CantidadFilas = tbldetalle.getRowCount();
        for (int i = CantidadFilas - 1; i >= 0; i--) {
            model.removeRow(i);
        }

        try {

            ResultSet datos = this.CP.select("*", "\"schUTN\".detalle_movimiento_inventario", "num_documento = '" + Codigo + "'");

            String[] Detalles = new String[8];

            while (datos.next()) {
//                this.TablaDeDatos.add(datos.getString(1)+" "+datos.getString(2) +" "+ datos.getString(3) + "\n");

                Detalles[0] = datos.getString(1);
                Detalles[1] = datos.getString(2);
//             Detalles[2]= datos.getString(3);
//             Detalles[3]= datos.getString(4);

                Detalles[4] = datos.getString(5);
                Detalles[5] = datos.getString(6);
                Detalles[6] = datos.getString(7);
                Detalles[7] = datos.getString(8);

                ResultSet dato3 = this.CP.select("descripcion", "\"schUTN\".articulo", "cod_articulo= '" + datos.getString(4) + "'");

                while (dato3.next()) {
                    Detalles[2] = dato3.getString(1);
                }
                ResultSet dato = this.CP.select("descripcion", "\"schUTN\".tipo_movimiento", "tipo_movimiento= '" + datos.getString(4) + "'");

                while (dato.next()) {
                    Detalles[3] = dato.getString(1);
//                       TableColumn sportColumn = tbldetalle.getColumnModel ().getColumn(3);
//                        JComboBox Combo=new JComboBox();
//                      
//                    Combo.addItem(dato.getString(1));
//Combo.  
//                     sportColumn.setCellEditor(new DefaultCellEditor(Combo));

                }

                model.addRow(Detalles);

            }

            System.out.println("Datos Cargados");
        } catch (Exception e) {
            System.out.printf("Error: " + e.toString() + "\n");
        }

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(frmMovimientoInventario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(frmMovimientoInventario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(frmMovimientoInventario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(frmMovimientoInventario.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new frmMovimientoInventario().setVisible(true);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
                } catch (SQLException ex) {
                    Logger.getLogger(frmMovimientoInventario.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel JlArticulo;
    private javax.swing.JLabel JlCantidad;
    private javax.swing.JLabel JlTipo;
    private javax.swing.JButton btnAnular;
    private javax.swing.JButton btnAplicar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JComboBox cbxArticulo;
    private javax.swing.JComboBox cbxTipoMov;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable tblMovimientos;
    private javax.swing.JTable tbldetalle;
    private javax.swing.JTextField txtCantidad;
    private javax.swing.JTextField txtjustificacion;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables
}
